package BloodTimeHybernateTest;

import java.util.Iterator;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;

import BloodTimeHybernateDO.ArmaduraDO;
import BloodTimeHybernateDO.CiudadArticuloDO;
import BloodTimeHybernateDO.CiudadDO;
import BloodTimeHybernateDO.VampiroArticuloDO;
import BloodTimeHybernateDO.VampiroDO;
/**
 * 
 * @author Manuel A. Quintero V.
 * 
 */
public class TestArmadura {
	public static void main(String[] args) {
		Configuration configuration = new AnnotationConfiguration();
		configuration.configure("/BloodTimeHybernateDO/hibernate.cfg.xml");
		SessionFactory sessionFactory = configuration.buildSessionFactory();
		
		// ---------------------------------------------------------------
        // Insert
        // ---------------------------------------------------------------
		Session session = sessionFactory.openSession();
		session.beginTransaction();
		ArmaduraDO armadura;
		VampiroDO vampiro;
		CiudadDO ciudad;
		for(int i=1;i<=5;i++){
			armadura = new ArmaduraDO();
			armadura.setNombre("nombre"+i);
			armadura.setDescripcion("descripcion"+i);
			armadura.setPrecioCompra(i);
			armadura.setPrecioVenta(i);
			armadura.setCantMejoraDefensa(i);
			armadura.setHabArmasRequerida(i);
			
			vampiro=new VampiroDO();
			vampiro.setAlias("alias"+i);
			ciudad=new CiudadDO();
			ciudad.setNombre("ciudad"+i);
			
			for (int j = 1; j <=5; j++) {
				VampiroArticuloDO vampiroArticulo = new VampiroArticuloDO();
				vampiroArticulo.setEquipado(true);
				vampiroArticulo.setArticuloId(armadura);
				vampiroArticulo.setVampiroId(vampiro);
				armadura.getVampiroArticuloList().add(vampiroArticulo);
				session.save(vampiroArticulo);
				
				CiudadArticuloDO ciudadArticulo = new CiudadArticuloDO();
				ciudadArticulo.setArticuloId(armadura);
				ciudadArticulo.setCiudadId(ciudad);
				armadura.getCiudadArticuloList().add(ciudadArticulo);
				session.save(ciudadArticulo);
			}
			session.save(armadura);
			session.save(vampiro);
			session.save(ciudad);
		}
		session.getTransaction().commit();
		session.close();
		
		// ---------------------------------------------------------------
        // Load
        // ---------------------------------------------------------------

		session = sessionFactory.openSession();
		session.beginTransaction();

		armadura = null;
		armadura = (ArmaduraDO) session.load(ArmaduraDO.class, 1);
		System.out.println("Armadura.nombre: " + armadura.getNombre());
		
		// ---------------------------------------------------------------
        // Update
        // ---------------------------------------------------------------
		armadura.setNombre("otro nombre");

		session.getTransaction().commit();
		session.close();

		// ---------------------------------------------------------------
        // Query
        // ---------------------------------------------------------------

		session = sessionFactory.openSession();
		session.beginTransaction();

		armadura = null;
		armadura = (ArmaduraDO) session.createQuery("FROM ArmaduraDO AS ar WHERE ar.id = '2'").uniqueResult();
		System.out.println("Armadura.nombre: " + armadura.getNombre());

			
		// ---------------------------------------------------------------
        // Delete
        // ---------------------------------------------------------------
		Iterator<CiudadArticuloDO> ite = armadura.getCiudadArticuloList().iterator();
		while(ite.hasNext()){
			CiudadArticuloDO ciudadarticulo = (CiudadArticuloDO) ite.next();
			ciudadarticulo.setArticuloId(null);
		}
		Iterator<VampiroArticuloDO> ite1 = armadura.getVampiroArticuloList().iterator();
		while(ite.hasNext()){
			VampiroArticuloDO vampiroarticulo = (VampiroArticuloDO) ite1.next();
			vampiroarticulo.setArticuloId(null);
		}
		
		session.delete(armadura);

		session.getTransaction().commit();
		session.close();

		// ---------------------------------------------------------------
        // List
        // ---------------------------------------------------------------

		session = sessionFactory.openSession();
		session.beginTransaction();
		List<ArmaduraDO> list = session.createCriteria(ArmaduraDO.class).list();
		for (ArmaduraDO art : list) {
			System.out.println("Armadura.nombre: "+art.getNombre());
		}

		session.getTransaction().commit();
		session.close();

	}

}
